<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xml:lang="en" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Concept: Visual Modeling</title>
<meta name="uma.type" content="Concept">
<meta name="uma.name" content="visual_modeling">
<meta name="uma.presentationName" content="Visual Modeling">
<meta name="element_type" content="concept">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../../css/default.css" type="text/css">
<script src="./../../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../../';
					var imgPath = './../../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top"><a name="Top"></a>
<div id="page-guid" value="_0XY6UMlgEdmt3adZL5Dmdw"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Concept: Visual Modeling</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../../images/concept.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">This concept introduces what visual modeling is and its benefits.</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Related Elements</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../../core.tech.common.extend_supp/guidances/guidelines/using_visual_modeling_DA1CA6E4.html" guid="_0SsecNr8EdyXE6np2_hUMA">Using Visual Modeling</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><p align="center">
    <img height="229" alt="visual modelling" src="./../../../core.tech.common.extend_supp/guidances/concepts/./resources/visual.gif" width="447" />
</p>
<p align="center">
    Visual modeling raises the level of abstraction
</p>
<p>
    Visual modeling is the use of semantically rich, graphical and textual design notations to capture software designs. A
    notation, such as UML, allows the level of abstraction to be raised, while maintaining rigorous syntax and semantics.
    In this way, it improves communication in the design team, as the design is formed and reviewed, allowing the reader to
    reason about the design, and it provides an unambiguous basis for implementation.
</p>
<h3>
    How visual models help
</h3>
<p>
    A model is a simplified view of a system. It shows the essentials of the system from a particular perspective and hides
    the nonessential details. Visual models help you:
</p>
<ul>
    <li>
        Increase understanding of complex systems
    </li>
    <li>
        Explore and compare design alternatives at a low cost
    </li>
    <li>
        Form a foundation for implementation
    </li>
    <li>
        Capture requirements precisely
    </li>
    <li>
        Communicate decisions unambiguously
    </li>
</ul>
<h4>
    Increase understanding of complex systems
</h4>
<p>
    The importance of models increases as systems become more complex. For example, you can build a doghouse without
    blueprints. However, as you progress to building houses and then to skyscrapers, your need for blueprints becomes
    pronounced.
</p>
<p>
    Similarly, a small application built by one person in a few days may be easily understood in its entirety. However, an
    e&nbsp;-&nbsp;commerce system with tens of thousands of source lines of code (SLOCs) or an air traffic control system
    with hundreds of thousands of SLOCs can no longer be easily understood by one person. Constructing models allows a
    developer to focus on the big picture, understand how components interact, and identify fatal flaws.&nbsp;
</p>
<p>
    Among the various types of models are these examples:
</p>
<ul>
    <li>
        Use cases to specify behavior unambiguously
    </li>
    <li>
        Class diagrams and data model diagrams to capture design
    </li>
    <li>
        State transition diagrams to model dynamic behavior
    </li>
</ul>
<p>
    Modeling is important because it helps the team visualize, construct, and document the structure and behavior of the
    system without getting lost in complexity.
</p>
<h4>
    Explore and compare design alternatives at a low cost
</h4>
<p>
    You can create and modify simple models inexpensively to explore design alternatives. Innovative ideas can be captured
    and reviewed by other developers before investing in costly code development. When coupled with iterative development,
    visual modeling helps developers assess design changes and communicate these changes to the entire development team.
</p>
<h4>
    Form a foundation for implementation
</h4>
<p>
    Today, many projects employ object-oriented programming languages to build reusable, change-tolerant, and stable
    systems. To get these benefits, it is even more important to use object technology in design.
</p>
<p>
    The creation of visual models, whether&nbsp;on paper; around a whiteboard; or in a modeling tool,&nbsp;can help a team
    to gain agreement on key aspects of the system before investing time&nbsp;in proving&nbsp;their ideas&nbsp;with code.
    Having a shared model of the system promotes collaboration within the team, encouraging everyone to work towards the
    same goal.
</p>
<p>
    With the support of appropriate tools, you can use a design model to generate an initial code for implementation. This
    is referred to as <strong>forward engineering</strong> or <strong>code generation</strong>. You can also enhance design
    models to include enough information to build the system.
</p>
<p>
    <strong>Reverse engineering</strong> may also be applied to generate design models from existing implementations. You
    can use this method to evaluate existing implementations.&nbsp;&nbsp;
</p>
<p>
    <strong>Round-trip engineering</strong> combines both forward and reverse engineering techniques to ensure consistent
    design and code. Combined with an iterative process and the right tools, round-trip engineering allows you to
    synchronize the design and code during each iteration.
</p>
<h4>
    Capture requirements precisely
</h4>
<p>
    Before building a system, it's critical to capture the requirements. Specifying the requirements using a precise and
    unambiguous model helps to ensure that all stakeholders can understand and agree on the requirements.
</p>
<p>
    A model that separates the external behavior of the system from the implementation of it helps you focus on the
    intended use of the system, without getting bogged down in implementation details.
</p>
<h4>
    Communicate decisions unambiguously
</h4>
<p>
    The Unified Modeling Language (UML) is&nbsp;a consistent notation that can be applied for system engineering, as well
    as for business engineering. According to these excerpts from the UML specification, a standard notation::
</p>
<ul>
    <li>
        <p>
            Serves as a language for communicating decisions that are not obvious or cannot be inferred from the code
            itself.
        </p>
    </li>
    <li>
        <p>
            Provides semantics that are rich enough to capture all important strategic and tactical decisions.
        </p>
    </li>
    <li>
        <p>
            Offers a form concrete enough for humans to reason [about] and for tools to manipulate.
        </p>
    </li>
</ul>
<p>
    UML represents the convergence of the best practice in software modeling throughout the object-technology industry. For
    more information on the UML, see <a class="elementLinkWithUserText" href="./../../../core.default.nav_view.base/guidances/supportingmaterials/references_C6FF2A8D.html" guid="__nHToFndEd2EdJKkAyeBng">[UML05]</a>.
</p></td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright"><p> This program and the accompanying materials are made available under the<br />
  <a href="http://www.eclipse.org/org/documents/epl-v10.php" target="_blank">Eclipse 
  Public License V1.0</a>, which accompanies this distribution. </p><p/><p> <a class="elementLink" href="./../../../core.default.release_copyright.base/guidances/supportingmaterials/openup_copyright_C3031062.html" guid="_UaGfECcTEduSX6N2jUafGA">OpenUP Copyright</a></p></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
